<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <title>Arduino Reference - SoftwareSerial </title>
  <link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png">
  <link rel='stylesheet' href='arduinoWideRender.css' 
type='text/css' />
    <!--HeaderText--><style type='text/css'><!--
  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }
  code { white-space: nowrap; }
  .vspace { margin-top:1.33em; }
  .indent { margin-left:40px; }
  .outdent { margin-left:40px; text-indent:-40px; }
  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }
  a.createlink { text-decoration:none; position:relative; top:-0.5em;
    font-weight:bold; font-size:smaller; border-bottom:none; }
  img { border:0px; }
  .editconflict { color:green; 
  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }

  table.markup { border: 2px dotted #ccf; width:90%; }
  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }
  td.markup1 { border-bottom: 1px solid #ccf; }
  div.faq { margin-left:2em; }
  div.faq p.question { margin: 1em 0 0.75em -2em; font-weight:bold; }
  div.faq hr { margin-left: -2em; }
   
    .frame 
      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }
    .lfloat { float:left; margin-right:0.5em; }
    .rfloat { float:right; margin-left:0.5em; }
a.varlink { text-decoration:none; }
/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.arduino  {font-family:monospace;}
.arduino .imp {font-weight: bold; color: red;}
.arduino .kw1 {color: #CC6600;}
.arduino .kw2 {color: #006699;}
.arduino .kw3 {color: #CC6600; font-weight: bold;}
.arduino .co1 {color: #7E7E7E; font-style: italic;}
.arduino .co2 {color: #7E7E7E;}
.arduino .coMULTI {color: #7E7E7E; font-style: italic;}
.arduino .es0 {color: #000099; font-weight: bold;}
.arduino .es1 {color: #000099; font-weight: bold;}
.arduino .es2 {color: #660099; font-weight: bold;}
.arduino .es3 {color: #660099; font-weight: bold;}
.arduino .es4 {color: #660099; font-weight: bold;}
.arduino .es5 {color: #006699; font-weight: bold;}
.arduino .br0 {color: #000000;}
.arduino .sy0 {color: #000000;}
.arduino .st0 {color: #0066CC;}
.arduino .nu0 {color: #000000;}
.arduino .nu6 {color: #208080;}
.arduino .nu8 {color: #208080;}
.arduino .nu12 {color: #208080;}
.arduino .nu16 {color:#800080;}
.arduino .nu17 {color:#800080;}
.arduino .nu18 {color:#800080;}
.arduino .nu19 {color:#800080;}
.arduino .me1 {color: #ff1493;}
.arduino .me2 {color: #ff1493;}
.arduino span.xtra { display:block; }

.sourceblocklink {
  text-align: right;
  font-size: smaller;
}
.sourceblocktext {
  padding: 0.5em;
  color: #000000;
  background-color: #ffffff;
}
.sourceblocktext div {
  font-family: monospace;
  font-size: small;
  line-height: 1;
  height: 1%;
}
.sourceblocktext div.head,
.sourceblocktext div.foot {
  font: italic medium serif;
  padding: 0.5em;
}

--></style>  <meta name='robots' content='index,follow' />

  <meta name="verify-v1" content="TtxFIEJAB6zdJ509wLxjnapQzKAMNm9u0Wj4ho6wxIY=" />
</head>
<body>
<div id="page">
  <!--PageHeaderFmt-->
  <div id="pageheader">
    <div class="title"><a href='http://arduino.cc/en'>Arduino</a></div>
  </div>
  <!--/PageHeaderFmt-->

  <!--PageLeftFmt-->
  <div id="pagenav">
    <div id="navbar">
  	<p><a class='wikilink' href='http://arduino.cc/en/Main/Buy'>Buy</a>
<a class='wikilink' href='http://arduino.cc/en/Main/Software'>Download</a>
<a class='wikilink' href='Guide_index.html'>Getting Started</a>
<a class='wikilink' href='http://arduino.cc/en/Tutorial/HomePage'>Learning</a>
<a class='wikilink' href='index.html'>Reference</a>
<a class='wikilink' href='http://arduino.cc/en/Main/Hardware'>Hardware</a>
<a class='wikilink' href='FAQ.html'>FAQ</a>
</p>
<p class='vspace'></p>

    </div>
  </div>
  <!--/PageLeftFmt-->

  <div id="pagetext">
  <!--PageText-->
<div id='wikitext'>
<p><strong>Reference</strong> &nbsp;  <a class='wikilink' href='index.html'>Language</a> | <a class='wikilink' href='Libraries.html'>Libraries</a> | <a class='wikilink' href='Comparison.html'>Comparison</a> | <a class='wikilink' href='Changes.html'>Changes</a>
</p>
<p class='vspace'></p><h2><span class='wikiword'>SoftwareSerial</span> Library</h2>
<p>The Arduino hardware has built-in support for serial communication on pins 0 and 1 (which also goes to the computer via the USB connection). The native serial support happens via a piece of hardware (built into the chip) called  a <a class='urllink' href='http://en.wikipedia.org/wiki/UART' rel='nofollow'>UART</a>. This hardware allows the Atmega chip to receive serial communication even while working on other tasks, as long as there room in the 64 byte serial buffer.
</p>
<p class='vspace'></p><p>The <span class='wikiword'>SoftwareSerial</span> library has been developed to allow serial communication on other digital pins of the Arduino, using software to replicate the functionality (hence the name "<span class='wikiword'>SoftwareSerial</span>"). It is possible to have multiple software serial ports with speeds up to 115200 bps. A parameter enables  inverted signaling for devices which require that protocol.
</p>
<p class='vspace'></p><p>The version of <span class='wikiword'>SoftwareSerial</span> included in 1.0 and later is based on the <a class='urllink' href='http://arduiniana.org/libraries/newsoftserial' rel='nofollow'>NewSoftSerial library</a> by Mikal Hart.
</p>
<p class='vspace'></p><h4>Limitations</h4>
<p>The library has the following known limitations:
</p>
<p class='vspace'></p><ul><li>If using multiple software serial ports, only one can receive data at a time. 
</li><li>Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13,  50, 51, 52, 53,  62, 63, 64, 65, 66, 67, 68, 69
</li><li>Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
</li></ul><p class='vspace'></p><h4>Example</h4>
<div  class='code' >
<p class='vspace'></p><p>
<div class='sourceblock ' id='sourceblock1'>
  <div class='sourceblocktext'><div class="arduino"><span class="coMULTI">/*<br />
&nbsp; Software serial multple serial test<br />
&nbsp;<br />
&nbsp;Receives from the hardware serial, sends to software serial.<br />
&nbsp;Receives from software serial, sends to hardware serial.<br />
&nbsp;<br />
&nbsp;The circuit: <br />
&nbsp;* RX is digital pin 10 (connect to TX of other device)<br />
&nbsp;* TX is digital pin 11 (connect to RX of other device)<br />
&nbsp;<br />
&nbsp;Note:<br />
&nbsp;Not all pins on the Mega and Mega 2560 support change interrupts, <br />
&nbsp;so only the following can be used for RX: <br />
&nbsp;10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69<br />
&nbsp;<br />
&nbsp;Not all pins on the Leonardo support change interrupts, <br />
&nbsp;so only the following can be used for RX: <br />
&nbsp;8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).<br />
&nbsp;<br />
&nbsp;created back in the mists of time<br />
&nbsp;modified 25 May 2012<br />
&nbsp;by Tom Igoe<br />
&nbsp;based on Mikal Hart's example<br />
&nbsp;<br />
&nbsp;This example code is in the public domain.<br />
&nbsp;<br />
&nbsp;*/</span><br />
<span class="co2">#include &lt;SoftwareSerial.h&gt;</span><br />
<br />
SoftwareSerial mySerial<span class="br0">&#40;</span><span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">11</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// RX, TX</span><br />
<br />
<span class="kw1">void</span> <span class="kw3">setup</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// Open serial communications and wait for port to open:</span><br />
&nbsp; <span class="kw1">Serial</span>.<span class="kw1">begin</span><span class="br0">&#40;</span><span class="nu0">57600</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">Serial</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="sy0">;</span> <span class="co1">// wait for serial port to connect. Needed for Leonardo only</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
<br />
&nbsp; <span class="kw1">Serial</span>.<span class="kw1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Goodnight moon!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="co1">// set the data rate for the SoftwareSerial port</span><br />
&nbsp; mySerial.<span class="kw1">begin</span><span class="br0">&#40;</span><span class="nu0">4800</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; mySerial.<span class="kw1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Hello, world?&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">void</span> <span class="kw3">loop</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">// run over and over</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mySerial.<span class="kw1">available</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">Serial</span>.<span class="kw1">write</span><span class="br0">&#40;</span>mySerial.<span class="kw1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">Serial</span>.<span class="kw1">available</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; mySerial.<span class="kw1">write</span><span class="br0">&#40;</span><span class="kw1">Serial</span>.<span class="kw1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
  <div class='sourceblocklink'><a href='#' type='text/plain'>[Get Code]</a></div>
</div>

</p>
<p class='vspace'></p></div>
<p class='vspace'></p><h4>Functions</h4>
<ul><li><a class='wikilink' href='SoftwareSerialConstructor.html'>SoftwareSerial</a>()
</li><li><a class='wikilink' href='SoftwareSerialAvailable.html'>available</a>()
</li><li><a class='wikilink' href='SoftwareSerialBegin.html'>begin</a>()
</li><li><a class='wikilink' href='SoftwareSerialIsListening.html'>isListening</a>()
</li><li><a class='wikilink' href='SoftwareSerialOverflow.html'>overflow</a>()
</li><li><a class='wikilink' href='SoftwareSerialPeek.html'>peek</a>()
</li><li><a class='wikilink' href='SoftwareSerialRead.html'>read</a>()
</li><li><a class='wikilink' href='SoftwareSerialPrint.html'>print</a>()
</li><li><a class='wikilink' href='SoftwareSerialPrintln.html'>println</a>()
</li><li><a class='wikilink' href='SoftwareSerialListen.html'>listen</a>()
</li><li><a class='wikilink' href='SoftwareSerialWrite.html'>write</a>()
</li></ul><p><a class='wikilink' href='index.html'>Reference Home</a>
</p>
<p class='vspace'></p><p><em>Corrections, suggestions, and new documentation should be posted to the <a class='urllink' href='http://arduino.cc/forum/index.php/board,23.0.html' rel='nofollow'>Forum</a>.</em>
</p>
<p class='vspace'></p><p>The text of the Arduino reference is licensed under a
<a class='urllink' href='http://creativecommons.org/licenses/by-sa/3.0/' rel='nofollow'>Creative Commons Attribution-ShareAlike 3.0 License</a>.  Code samples in the reference are released into the public domain.
</p>
</div>


  </div>

  <!--PageFooterFmt-->
  <div id="pagefooter">
&copy;Arduino | 
  <a href='#'>Edit Page</a> | <a href='#'>Page History</a> | <a href='#' target='_blank'>Printable View</a> | <a href='http://arduino.cc/en/Site/AllRecentChanges'>All Recent Site Changes</a>
  </div>
  <!--/PageFooterFmt-->

</div>
</body>
</html>
